package org.gongliang.jsmile.common.kit;

import org.gongliang.jsmile.common.enums.KCache;
import org.gongliang.jsmile.common.kit.web.SpringKit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.Cache;
import org.springframework.cache.Cache.ValueWrapper;
import org.springframework.cache.CacheManager;

/**
 * spring缓存工具类
 * 
 * @author 龚亮
 *
 */
public class CacheKit {

	private static CacheManager cacheManager = SpringKit.getBean(CacheManager.class);

	private static final Logger logger = LoggerFactory.getLogger(CacheKit.class);

	/**
	 * 清除默认缓存内容
	 */
	public static void clear() {
		clear(KCache.defaultCache);
	}

	/**
	 * 从默认缓存中移除
	 */
	public static void remove(String key) {
		remove(KCache.defaultCache, key);
	}

	/**
	 * 获取默认缓存 默认保存一个小时
	 */
	public static Object get(String key) {
		return get(KCache.defaultCache, key);
	}

	/**
	 * 写入默认缓存 默认缓存保存一小时
	 */
	public static void put(String key, Object value) {
		put(KCache.defaultCache, key, value);
	}

	/**
	 * 获取缓存
	 *
	 * @param cacheName
	 * @param key
	 * @return
	 */
	public static Object get(KCache cache, String key) {
		ValueWrapper value = getCache(cache).get(key);
		return value == null ? null : value.get();
	}

	/**
	 * 写入缓存
	 *
	 * @param cacheName
	 * @param key
	 * @param value
	 */
	public static void put(KCache cache, String key, Object value) {
		logger.info("写入" + cache.getCacheName() + "缓存中的key:" + key + "。值为:" + JsonKit.toJSONString(value));
		getCache(cache).put(key, value);
	}

	/**
	 * 从缓存中清除
	 */
	public static void clear(KCache cache) {
		getCache(cache).clear();
	}

	/**
	 * 从缓存中移除
	 */
	public static void remove(KCache cache, String key) {
		getCache(cache).evict(key);
	}

	/**
	 * 获得一个Cache
	 */
	private static Cache getCache(KCache cache) {
		return cacheManager.getCache(cache.getCacheName());
	}
}
